When request auth token, using Intent#setClassName rather than Intent#setPackage to work around issue in #startService. git-svn-id: http://google-cache-invalidation-api.googlecode.com/svn/trunk@342 1cc9d426-c294-39be-ba72-c0199ca0f247
diff --git a/src/java/com/google/ipc/invalidation/ticl/android2/channel/AndroidMessageSenderService.java b/src/java/com/google/ipc/invalidation/ticl/android2/channel/AndroidMessageSenderService.java index 3bc7f38..3e7c3e7 100644 --- a/src/java/com/google/ipc/invalidation/ticl/android2/channel/AndroidMessageSenderService.java +++ b/src/java/com/google/ipc/invalidation/ticl/android2/channel/AndroidMessageSenderService.java
@@ -18,6 +18,7 @@ import com.google.android.gcm.GCMRegistrar; import com.google.ipc.invalidation.external.client.SystemResources.Logger; import com.google.ipc.invalidation.external.client.android.service.AndroidLogger; +import com.google.ipc.invalidation.ticl.android2.AndroidTiclManifest; import com.google.ipc.invalidation.ticl.android2.ProtocolIntents; import com.google.ipc.invalidation.ticl.android2.channel.AndroidChannelConstants.AuthTokenConstants; import com.google.ipc.invalidation.ticl.android2.channel.AndroidChannelConstants.HttpConstants; @@ -163,17 +164,21 @@ PendingIntent pendingIntent = PendingIntent.getService( this, Arrays.hashCode(message), tokenResponseIntent, PendingIntent.FLAG_ONE_SHOT); - // We send the pending intent as an extra in a normal intent to the application. We require that - // the intent be delivered only within this package, as a security check. The application must - // define a service with an intent filter that matches the ACTION_REQUEST_AUTH_TOKEN in order - // to receive this intent. + // We send the pending intent as an extra in a normal intent to the application. The + // invalidation listener service must handle AUTH_TOKEN_REQUEST intents. Intent requestTokenIntent = new Intent(AuthTokenConstants.ACTION_REQUEST_AUTH_TOKEN); - requestTokenIntent.setPackage(getPackageName()); requestTokenIntent.putExtra(AuthTokenConstants.EXTRA_PENDING_INTENT, pendingIntent); if (invalidAuthToken != null) { requestTokenIntent.putExtra(AuthTokenConstants.EXTRA_INVALIDATE_AUTH_TOKEN, invalidAuthToken); } - startService(requestTokenIntent); + String simpleListenerClass = + new AndroidTiclManifest(getApplicationContext()).getListenerServiceClass(); + requestTokenIntent.setClassName(getApplicationContext(), simpleListenerClass); + try { + startService(requestTokenIntent); + } catch (SecurityException exception) { + logger.warning("unable to request auth token: %s", exception); + } } /**